<?php

/**
 * 格式化打印数组
 * @param  [type] $arr 要格式化的数组
 * @return [type]
 */
function p($arr) {
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
}
/**
 * 栏目递归处理函数 
 * @param type $arr 要递归处理的数组
 * @param type $pid 父id值
 * @param type $type 类型，1把栏目组合成分级多维数组，2把栏目重组为一维数组，增加$html标识，用于区分父级、子级，3传递分类ID返回所有父级，用于当前位置
 * @param type $fid 把$fid的父级栏目都找出来
 * @param type $level 类型为2时用到，$htm的替换次数
 * @param type $htm 类型为2时用到，区分子级与父组的字符串
 * @return type 
 */
function category_recursion($arr, $pid = 0, $type = 1, $fid = 1, $level = 0,$htm='--') {
    switch ($type) {
        case 1 : //组合多维数组
            $array = array();
            foreach ($arr as $v) {
                if ($v['pid'] == $pid) {
                    $array[$v['cid']] = $v;
                    $array[$v['cid']]['child'] = category_recursion($arr, $v['cid']);
                }
            }
            return $array;

        case 2 : //组合一维数组
            static $array = array();
            static $i = -1;
            $i++;
            foreach ($arr as $v) {
                if ($v['pid'] == $pid) {
                    $array[$i] = $v;
                    $array[$i]['lv'] = $level;
                    $array[$i]['html'] = str_repeat($htm, $level);
                    category_recursion($arr, $v['cid'], $type, $fid, $level + 1,$htm);
                }
            }
            return $array;

        case 3 : //传递分类ID返回所有父级
            static $array = array();
            foreach ($arr as $v) {
                if ($v['cid'] == $fid) {
                    $array[$v['cid']] = $v;
                    category_recursion($arr, $pid, $type, $v['pid']);
                }
            }
            return array_reverse($array);
    }
}

?>